#include "TestRecursoDirecto.h"
#include "../src/recursoDeAlmacenamiento/FabricaRecursosAlmacenamiento.h"
#include "../src/recursoDeAlmacenamiento/RecursoDeAlmacenamientoDirecto.h"

TestRecursoDirecto::TestRecursoDirecto() {


}

TestRecursoDirecto::~TestRecursoDirecto() {

}

void TestRecursoDirecto::run() {
	this->test();
	this->testConseguirUltimoComponenteVivo();
}

void TestRecursoDirecto::test() {

	system("rm ./Archivos/directo");
	this->recurso = FabricaRecursosAlmacenamiento::getFabrica()->crearRecursoAccesoDirecto("./Archivos/directo",5,DIFERIDA);

	recurso->guardar(Bytes("dato1"));
	recurso->guardar(Bytes("dato2"));
	recurso->guardar(Bytes("dato3"));
	recurso->guardar(Bytes("dato4"));

	assert(recurso->getCantDatosGuardados() == 4, "Probando cantidad de datos guardados");

	assert(recurso->cargar(1).toString() == "dato2", "Probando cargar dato");
	assert(recurso->cargar(3).toString() == "dato4", "Probando cargar dato bis");
	assert(recurso->eliminar(2), "Probando eliminar dato3");
	assert(!recurso->eliminar(2), "Probando eliminar dato3 cuando ya esta eliminado");

	delete recurso;
}

void TestRecursoDirecto::testConseguirUltimoComponenteVivo() {

	system("rm ./Archivos/directoUltimoComponente");
	this->recurso = FabricaRecursosAlmacenamiento::getFabrica()->crearRecursoAccesoDirecto("./Archivos/directoUltimoComponente",5,DIFERIDA);

	recurso->guardar(Bytes("dato1"));
	recurso->guardar(Bytes("dato2"));
	recurso->guardar(Bytes("dato3"));
	recurso->guardar(Bytes("dato4"));

	recurso->eliminar(3);
	recurso->eliminar(2);


	delete recurso;
}
